const express = require("express")
const router = express.Router()
const fs = require("fs")
const jwt = require("jsonwebtoken")
const { decryptAESKey } = require("../convert/converter_aes_rsa_utils")
const path = require("path")

// DRM系统配置
const DRM_CONFIG = {
  SECRET_KEY: "your-very-secret-key-change-in-production", // JWT密钥
  TOKEN_EXPIRE: "1h" // 令牌过期时间
}

// 用户认证数据库(示例)
const users = {
  admin: { password: "admin", role: "admin" },
  user: { password: "user", role: "user" }
}

// 授权端点 - 生成访问令牌
router.post("/auth/token", (req, res) => {
  const { username, password } = req.body

  // 验证用户凭据
  if (!users[username] || users[username].password !== password) {
    return res.status(401).json({ error: "无效的用户名或密码" })
  }

  // 创建JWT令牌
  const token = jwt.sign(
    {
      username,
      role: users[username].role,
      keyAccess: true
    },
    DRM_CONFIG.SECRET_KEY,
    { expiresIn: DRM_CONFIG.TOKEN_EXPIRE }
  )

  res.json({
    token,
    expires_in: 3600, // 1小时(秒)
    token_type: "Bearer"
  })
})

// JWT验证中间件
const verifyToken = (req, res, next) => {
  const authHeader = req.headers.authorization
  if (!authHeader || !authHeader.startsWith("Bearer ")) {
    return res.status(401).json({ error: "未提供授权令牌（Token）" })
  }
  const token = authHeader.split(" ")[1]

  try {
    const decoded = jwt.verify(token, DRM_CONFIG.SECRET_KEY)
    // 检查令牌是否有权访问密钥
    if (!decoded.keyAccess) {
      return res.status(403).json({ error: "令牌无权访问加密密钥" })
    }
    req.user = decoded
    next()
  } catch (err) {
    if (err.name === "TokenExpiredError") {
      return res.status(401).json({ error: "令牌已过期" })
    }
    return res.status(403).json({ error: "无效的令牌" })
  }
}

// 密钥请求端点 - 需要有效的JWT令牌
router.get("/key", verifyToken, (req, res) => {
  const encryptedKeyPath = path.resolve(__dirname, "../public/drm/encryption.key")
  const rsaPrivateKeyPath = path.resolve(__dirname, "../keys/rsa_private.pem")

  try {
    // 读取加密的AES密钥
    const encryptedKey = fs.readFileSync(encryptedKeyPath)
    // 读取RSA私钥
    const privateKey = fs.readFileSync(rsaPrivateKeyPath)
    // 使用RSA私钥解密AES密钥
    const aesKey = decryptAESKey(encryptedKey, privateKey)

    // 可以基于用户角色添加更多访问控制
    if (req.user.role === "premium") {
      // 高质量密钥或其他特权
      console.log("Premium用户访问密钥")
    }

    // 记录密钥访问
    console.log(`用户 ${req.user.username} 访问了密钥`)

    // 返回解密后的AES密钥
    res.setHeader("Content-Type", "application/octet-stream")
    res.send(aesKey)
  } catch (err) {
    console.error("密钥处理错误:", err)
    res.status(500).json({ error: "服务器错误" })
  }
})

// 添加许可证信息端点
router.get("/info", (req, res) => {
  res.json({
    license_server: "http://localhost:3000/drm/key",
    key_endpoint: "/drm/key",
    auth_endpoint: "/auth/token",
    supported_drm: ["aes-128"]
  })
})

// 公钥端点 - 客户端可以获取公钥用于加密
router.get("/public-key", (req, res) => {
  try {
    const publicKeyPath = path.join(__dirname, "../keys", "rsa_public.pem")
    const publicKey = fs.readFileSync(publicKeyPath, "utf8")
    res.setHeader("Content-Type", "text/plain")
    res.send(publicKey)
  } catch (err) {
    console.error("公钥获取错误:", err)
    res.status(500).json({ error: "服务器错误" })
  }
})

module.exports = router
